package com.project.controller;

import com.project.annotation.MethodPermission;
import com.project.context.BaseContext;
import com.project.dto.AcceptanceAllDTO;
import com.project.dto.AcceptanceDTO;
import com.project.dto.InspectionQueryDTO;
import com.project.vo.AcceptancePageVO;
import com.project.vo.AcceptanceVO;
import com.project.vo.InspectionSummaryVO;
import com.project.result.PageData;
import com.project.result.PageResult;
import com.project.result.Result;
import com.project.service.AcceptanceService;
import com.project.vo.MaterialRequestVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.time.format.DateTimeParseException;
import java.util.List;

/**
 * 验收记录控制器
 * 提供验收记录的创建、查询、统计等功能接口
 * @author shoud
 */
@RestController
@RequestMapping("/acceptance-records")
public class AcceptanceController {
    @Autowired
    private AcceptanceService acceptanceService;

    /**
     * 根据ID获取验收记录详情
     *
     * @param id 验收记录ID
     * @return 验收记录详情
     */
    @MethodPermission(roles = {"1", "2", "3", "4"}, enabled = true)
    @GetMapping("/{id}")
    public Result get(@PathVariable Long id) {

        AcceptanceVO acceptanceVO = acceptanceService.get(id);

        return Result.success(acceptanceVO);
    }

    /**
     * 分页查询验收记录列表
     *
     * @param inspectionQueryDTO 查询条件对象，包含分页参数和筛选条件
     * @return 分页查询结果
     */
    @PostMapping("/list")
    public Result<PageData<AcceptancePageVO>> list(@RequestBody InspectionQueryDTO inspectionQueryDTO) {

        PageResult<AcceptancePageVO> pageResult = acceptanceService.listall(inspectionQueryDTO);
        // 构造 PageData 对象
        PageData<AcceptancePageVO> pageData = new PageData<>();
        pageData.setTotal(pageResult.getTotal());
        // 注意：由于 PageResult 不包含 pages、current、size 字段，这里需要设置默认值
        pageData.setPages(0);
        pageData.setCurrent(1);
        pageData.setSize(10);
        pageData.setList(pageResult.getRecords());

        return Result.success(pageData);
    }

    /**
     * 根据验收单号获取验收记录详情
     *
     * @param acceptanceNo 验收单号
     * @return 验收记录详情
     */
    @GetMapping("/by-no/{acceptanceNo}")
    public Result<AcceptanceVO> getInspectionSummary(@PathVariable String acceptanceNo) {

        return Result.success(acceptanceService.getInspectionSummary(acceptanceNo));
    }

    //# 1. 从 Git 索引中删除 .idea/ 下所有文件（但保留在本地磁盘） git rm -r --cached .idea/ #
    // 2. 提交这个操作 git commit -m "chore: stop tracking .idea/ files"

    /**
     * 获取检验统计信息
     *
     * @param startDate 开始日期，格式：YYYY-MM-DD
     * @param endDate   结束日期，格式：YYYY-MM-DD
     * @return 检验统计信息
     */
    @GetMapping("/statistics")
    public Result<InspectionSummaryVO> statistics(
            @RequestParam("start_date") String startDate,
            @RequestParam("end_date") String endDate) {


        LocalDate start = null;
        LocalDate end = null;

        //字符串类型转换为LocalDate 开始时间和结束时间
        if (startDate != null && !startDate.trim().isEmpty()) {
            try {
                start = LocalDate.parse(startDate);
            } catch (DateTimeParseException e) {
                return Result.error("开始日期格式错误，请使用 YYYY-MM-DD 格式");
            }
        }


        if (endDate != null && !endDate.trim().isEmpty()) {
            try {
                end = LocalDate.parse(endDate);
            } catch (DateTimeParseException e) {
                return Result.error("结束日期格式错误，请使用 YYYY-MM-DD 格式");
            }
        }

        // 检查开始日期是否晚于结束日期
        if (start != null && end != null && start.isAfter(end)) {
            return Result.error("开始日期等于结束日期");
        }


        InspectionSummaryVO list = acceptanceService.getInspectionStatistics(start, end);


        return Result.success(list);
    }

    /**
     * 创建新的验收记录
     *
     * @param acceptanceAllDTO 验收记录数据传输对象
     * @return 操作结果
     */
    @PostMapping("/create")
    public Result create(@RequestBody AcceptanceAllDTO  acceptanceAllDTO) {

        acceptanceService.create(acceptanceAllDTO);

        return Result.success();
    }


    /**
     * 更新验收记录状态
     *
     * @param id     验收记录ID
     * @param status 新的状态值
     * @return 操作结果
     */
    @PutMapping("/{id}/status")
    public Result updateStatus(@PathVariable("id") Long id, @RequestBody Integer status) {

        acceptanceService.updateStatus(id, status);

        return Result.success();
    }


}